package com.yunyao.web.utils;

import com.yunyao.common.web.util.ConvertUtil;
import com.yunyao.common.web.util.StringUtils;
import com.yunyao.framework.vo.system.MenuVO;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @Package：com.tsmti.cloud.core.util
 * @Class：TreeListUtil
 * @Description： list 转树形结构
 * @Author：chenyejian
 * @CreateDate：2024/7/5 14:37
 */
public class TreeListUtil {
    /**
     * list 转 tree
     * @param list 集合
     * @return list 转 tree
     */
    public static List<MenuVO> list2Tree(List<MenuVO> list) {
        List<MenuVO> result = new ArrayList<>();
        Map<Object, MenuVO> hash = list.stream().collect(Collectors.toMap(u -> u.getId(), u -> u));
        for (MenuVO u : list) {
            //根节点
            if (StringUtils.isEmpty(u.getParentId())){
                result.add(u);
                continue;
            }
            MenuVO p = hash.get(u.getParentId());
            //根节点
            if (p == null) {
                result.add(u);
                continue;
            } else {
                if (p.getChildren() == null) {
                    p.setChildren(new ArrayList<>());
                }
                p.getChildren().add(u);
                sortList(p.getChildren());
            }
        }
        sortList(result);
        return result;
    }
    /**
     * list排序
     * @param list 列表
     */
    private static void sortList(List<MenuVO> list){
        Collections.sort(list, new Comparator<MenuVO>() {
            @Override
            public int compare(MenuVO o1, MenuVO o2) {
                int sort1 = ConvertUtil.getIntValue(o1.getSort());
                int sort2 = ConvertUtil.getIntValue(o2.getSort());
                if (sort1 == sort2) {
                    return 0;
                }else {
                    // 从小到大 如果需要从大到小，可以将return的值反过来即可
                    return sort1 > sort2 ? 1 : -1 ;
                }
            }

        });
    }
}
